package co.com.inventarios.logica;

import java.util.Date;
import java.util.List;

import co.com.inventarios.modelo.Bodega;
import co.com.inventarios.modelo.BodegaWork;
import co.com.inventarios.modelo.Probodega;
import co.com.inventarios.modelo.ProbodegaId;
import co.com.inventarios.modelo.Producto;
import co.com.inventarios.modelo.Prounimed;
import co.com.inventarios.modelo.ProunimedId;
import co.com.inventarios.modelo.Unimed;
import co.com.inventarios.modelo.UnimedWork;
import co.com.inventarios.persistencia.BodegaDAO;
import co.com.inventarios.persistencia.EntityManagerHelper;
import co.com.inventarios.persistencia.IUnimedDAO;
import co.com.inventarios.persistencia.ProbodegaDAO;
import co.com.inventarios.persistencia.ProunimedDAO;
import co.com.inventarios.persistencia.QueryProBodegaDAO;
import co.com.inventarios.persistencia.QueryProUnimedDAO;
import co.com.inventarios.persistencia.QueryProductoDAO;
import co.com.inventarios.persistencia.QueryUnimedDAO;
import co.com.inventarios.persistencia.UnimedDAO;

public class UnimedLogica implements IUnimedLogica {

	Unimed miUnimed = new Unimed();
	IUnimedDAO lDAO = new UnimedDAO();

	public void grabarUnimed(String codigo, String nombre, Long activo)
			throws Exception {

		miUnimed.setUmdcodigo(codigo);
		miUnimed.setUmdnombre(nombre);
		miUnimed.setUmdactivo(activo);

		try {
			EntityManagerHelper.getEntityManager().getTransaction().begin();
			lDAO.save(miUnimed);
			EntityManagerHelper.getEntityManager().getTransaction().commit();
		} catch (Exception ex) {
			ex.printStackTrace();
			EntityManagerHelper.getEntityManager().getTransaction().rollback();
		}

	}

	public List<Unimed> buscarTodosUnimed() throws Exception {
		return new UnimedDAO().findAll();
		// TODO Auto-generated method stub
	}


	public List<Unimed> consultarUnimed(String propiedad, String valor)
			throws Exception {
		return new UnimedDAO().findByProperty(propiedad, valor);
	}

	public void eliminarUnimed(String codigo) throws Exception {
		miUnimed.setUmdcodigo(codigo);

		try {
			EntityManagerHelper.getEntityManager().getTransaction().begin();
			lDAO.delete(miUnimed);
			EntityManagerHelper.getEntityManager().getTransaction().commit();
		} catch (Exception ex) {
			ex.printStackTrace();
			EntityManagerHelper.getEntityManager().getTransaction().rollback();
		}

	}

	public Unimed consultarRegUnimed(String valor) throws Exception {
		return new UnimedDAO().findById(valor);
	}

	public UnimedWork[] findUnimedSelectedRow(List<Unimed> lista)
			throws Exception {
		UnimedWork doc;
		int max = lista.size();
		UnimedWork[] arrayDoc = new UnimedWork[max];
		if (lista != null) {
			for (int i = 0; i < max; i++) {
				doc = new UnimedWork();
				doc.setUnimedw(lista.get(i));
				arrayDoc[i] = doc;
			}
		}
		return arrayDoc;
	}

	public List<Unimed> findAll(String expresion) throws Exception {
		return new QueryUnimedDAO().findBy_all(expresion);
	}

	public List<Unimed> findByPropertyAll(String propiedad, String valor,String expresion)
			throws Exception {
		return new QueryUnimedDAO().findByPropertyAll(propiedad, valor,expresion);
	}

	public void Eliminar_Unimed(Unimed reg) throws Exception {
		try {
			EntityManagerHelper.getEntityManager().getTransaction().begin();
			new UnimedDAO().delete(reg);
			EntityManagerHelper.getEntityManager().getTransaction().commit();
		} catch (Exception ex) {
			ex.printStackTrace();
			EntityManagerHelper.getEntityManager().getTransaction().rollback();
		}

	}
	
	public void Guarda_Unimed(Unimed reg) throws Exception { 
		try {
			EntityManagerHelper.getEntityManager().getTransaction().begin();
			new UnimedDAO().save(reg);
			EntityManagerHelper.getEntityManager().getTransaction().commit();
		} catch (Exception ex) {
			ex.printStackTrace();
			EntityManagerHelper.getEntityManager().getTransaction().rollback();
		}

	}
	
	public void Modifica_Unimed(Unimed reg) throws Exception {
		try {
			EntityManagerHelper.getEntityManager().getTransaction().begin();
			new UnimedDAO().update(reg);
			EntityManagerHelper.getEntityManager().getTransaction().commit();
		} catch (Exception ex) {
			ex.printStackTrace();
			EntityManagerHelper.getEntityManager().getTransaction().rollback();
		}

	}
	
	public Unimed findByPropertyActivo(String propiedad,
			String valor) throws Exception {
		return new QueryUnimedDAO().findByPropertyActivo(propiedad, valor);
	}
	
	
	public List<Unimed> findByPropertyActivoLista(String propiedad) throws Exception {
		return new QueryUnimedDAO().findByPropertyActivoLista(propiedad);
	}
	
	
	///////// Prounimed
	
	
	public void Eliminar_Prounimed(Prounimed reg) throws Exception {
		try {
			EntityManagerHelper.getEntityManager().getTransaction().begin();
			new ProunimedDAO().delete(reg);
			EntityManagerHelper.getEntityManager().getTransaction().commit();
		} catch (Exception ex) {
			ex.printStackTrace();
			EntityManagerHelper.getEntityManager().getTransaction().rollback();
		}

	}
	
	public void Guarda_Prounimed(Prounimed reg) throws Exception { 
		try {
			EntityManagerHelper.getEntityManager().getTransaction().begin();
			new ProunimedDAO().save(reg);
			EntityManagerHelper.getEntityManager().getTransaction().commit();
		} catch (Exception ex) {
			ex.printStackTrace();
			EntityManagerHelper.getEntityManager().getTransaction().rollback();
		}

	}
	
	public Prounimed consultarRegUnimed(ProunimedId valor) throws Exception {
		return new ProunimedDAO().findById(valor);
	}
	
	
	public List<Prounimed> buscarTodosProUnimed(String codigo) throws Exception {
		return new QueryProUnimedDAO().buscarTodosProUnimed(codigo);
		// TODO Auto-generated method stub
	}
	
	public List<Prounimed> findByPropertys_all(String propiedad, String valor ,String espresion) throws Exception {
		return new QueryProUnimedDAO().findByPropertys_all(propiedad, valor , espresion);
		// TODO Auto-generated method stub
	}	
	
}
